<?php
/**
 * 验证器基础类
 * @author maniac
 */
namespace app\common\validate;

class Base extends \think\Validate
{
    /**
     * 验证字段值唯一性
     * @param  string $value 字段值
     * @param  string $rule  验证规则
     * @param  array  $data  所有数据
     * @param  string $key   字段名
     */
    public function unique($value, $rule, $data, $key)
    {
        $model = 'app\common\model\\' . request()->controller();
        $where = [
            [$key, 'eq', $value],
            ['id', 'neq', $data['id']],
        ];
        $info  = $model::field('id')->where($where)->find();
        return $info ? ((new $model)->tableName . '已存在') : true;
    }
    
    /**
     * 验证字段值唯一性
     * @param  string $value 字段值
     * @param  string $rule  验证规则
     * @param  array  $data  所有数据
     * @param  string $key   字段名
     */
    public function validVar($value, $rule, $data, $key)
    {
        return preg_match('/^[a-zA-Z]+[a-zA-Z0-9_]*$/', $value) ? true : false;
    }
    
    
    /**
     * 验证链接地址
     * @param  string $value 字段值
     * @param  string $rule  验证规则
     * @param  array  $data  所有数据
     * @param  string $key   字段名
     */
    public function validUri($value, $rule, $data, $key)
    {
        if (!trim($data['site_url'])) {
            $reg = '/^http(s?):\/\/(?:[A-za-z0-9-]+\.)+[A-za-z]{2,4}(:\d+)?(?:[\/\?#][\/=\?%\-&~`@[\]\':+!\.#\w]*)?/';
            return preg_match($reg, $data['site_url']);
        }
        return true;
    }
    
     /**
      * 是否包含子信息
      * @param  string $value 字段值
      * @param  string $rule  验证规则
      * @param  array  $data  所有数据
      * @param  string $key   字段名
      */
    public function containSub($value, $rule, $data, $key)
    {
        $model    = model(request()->controller());
        $subModel = '\app\common\model\\' . $model->subModel;
        $where    = [
            $model->subId => $value,
        ];
        $info     = $subModel::field('id')->where($where)->find();
        return empty($info) ? true : false;
    }
}
